
package OpenCodes.Servicios.Jugador;

import OpenCodes.Dominio.Jugador;
import OpenCodes.Dominio.Direccion;
import OpenCodes.Dominio.Ciudad;
import OpenCodes.Servicios.ServicioException;
import OpenCodes.UI.IUsuarioInterfazJugador;
import OpenCodes.Persistencia.AbstractDB;
import OpenCodes.Persistencia.MySQL.Jugador.IJugadorRepositorio;
import OpenCodes.Persistencia.RepositorioException;
import java.util.Date;
import java.util.List;
/**
 * Esta clase implementa todas las operaciones de las interfaces del jugador
 
 * @author OpenCodes (Nicolas Tenca, Luis Soto)
 * 
 * @see IAltaJugadorServicio
 * @see IBajaJugadorServicio
 * @see IListadoJugadorServicio
 * @see IModificarJugadorServicio
 * 
 */
public class JugadorServicio implements IJugadorServicio{//IAltaJugadorServicio, IListadoJugadorServicio, IModificarJugadorServicio, IBajaJugadorServicio {

    private AbstractDB fabricaDb;
    @Override
    public void init(IUsuarioInterfazJugador ui) {
        fabricaDb = AbstractDB.getInstance();
    }

    @Override
    public void agregar(IUsuarioInterfazJugador ui) throws ServicioException {
        int id = 0; // id=0 porque el Id lo carga la base de datos con un valor autonumerico

        String nombre = ui.getNombre();
        String apellido = ui.getApellido();

        if (existe(nombre,apellido)){
            throw new ServicioException("Ya existe un jugador con el mismo nombre");
        }
        
        String telefono = ui.getTelefono();

        //Direccion
        Ciudad ciudad = null;
        ciudad = new Ciudad(ui.getIdCiudad(), ui.getNombreCiudad());
        String calle = ui.getCalle();
        int numero = ui.getNumero();
        String piso = ui.getPiso();
        String departamento = ui.getDepartamento();
        int dni = ui.getDni();
        Date fechaNacimiento = ui.getFechaNacimiento();
        String sexo = ui.getSexo();

        Direccion direccion = null;

        //if (!calle.equals("")|| numero > 0 || !piso.equals("")  || !departamento.equals("") ){
        direccion = new Direccion(ciudad, calle, numero, piso, departamento);
        //}

        Jugador jugador = new Jugador(id, nombre, apellido, telefono, direccion, dni, fechaNacimiento, sexo);



        IJugadorRepositorio repo;

        try {
            repo = fabricaDb.getJugadorRepositorio();
            repo.agregar(jugador);

        } catch (RepositorioException e) {
            throw new ServicioException("Fallo la incorporacion del jugador", e);
        }
    }

    @Override
    public void listarTodos(IUsuarioInterfazJugador ui) throws ServicioException {
        IJugadorRepositorio repo;

		try {
			
            repo=fabricaDb.getJugadorRepositorio();

            List<Jugador> lista = repo.obtenerTodos();
			ui.setListaJugadores(lista);
		} catch (RepositorioException e) {
			throw new ServicioException("Fallo el listado de jugador", e) ;
		}
    }

    @Override
    public void eliminar(IUsuarioInterfazJugador ui) throws ServicioException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void modificar(IUsuarioInterfazJugador ui) throws ServicioException {
        int id=ui.getId();
        String nombre = ui.getNombre();
        String apellido = ui.getApellido();
        String telefono = ui.getTelefono();

        //Direccion
        Ciudad ciudad = null;
        ciudad = new Ciudad(ui.getIdCiudad(), ui.getNombreCiudad());
        String calle = ui.getCalle();
        int numero = ui.getNumero();
        String piso = ui.getPiso();
        String departamento = ui.getDepartamento();
        int dni = ui.getDni();
        Date fechaNacimiento = ui.getFechaNacimiento();
        String sexo = ui.getSexo();

        Direccion direccion = null;

        //if (!calle.equals("")|| numero > 0 || !piso.equals("")  || !departamento.equals("") ){
        direccion = new Direccion(ciudad, calle, numero, piso, departamento);
        //}

        Jugador jugador = new Jugador(id, nombre, apellido, telefono, direccion, dni, fechaNacimiento, sexo);

        IJugadorRepositorio repo;

        try {
            repo = fabricaDb.getJugadorRepositorio();
            repo.modificar(jugador);

        } catch (RepositorioException e) {
            throw new ServicioException("Fallo la incorporacion del jugador", e);
        }
    }

    @Override
    public void listarAlgunos(IUsuarioInterfazJugador ui, String nombre, String apellido) throws ServicioException {
        IJugadorRepositorio repo;

		try {
			
            repo=fabricaDb.getJugadorRepositorio();
           
            String[] parametrosBusqueda = {nombre,apellido};
           
            /*
            parametrosBusqueda= "jugador.nombre like '%"
                + nombre
                + "%' and jugador.apellido like '%"
                + apellido + "%'" ;
             * */
            List<Jugador> lista = repo.obtenerAlgunos(parametrosBusqueda);
			ui.setListaJugadores(lista);
		} catch (RepositorioException e) {
			throw new ServicioException("Fallo el listado de jugador (Busqueda)", e) ;
		}
    }

    public boolean existe(String nombre, String apellido) throws ServicioException {
        IJugadorRepositorio repo;

		try {

            repo=fabricaDb.getJugadorRepositorio();

            String[] parametrosBusqueda = {nombre, apellido};

            return repo.existe(parametrosBusqueda);

		} catch (RepositorioException e) {

			throw new ServicioException(e.getMessage(), e) ;
		}
    }
   
}
